From: Florian Müllner Date: Fri, 6 Dec 2019 12:56:24 +0000 (+0100) Subject: switcherPopup: Dismiss when a system modal dialog opens X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~781^2^2~323 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c0309d973268920eb9740bbdca3afc894bd5204f;p=gnome-shell.git switcherPopup: Dismiss when a system modal dialog opens As system modal dialogs may open without user interaction (for instance polkit or network agent requests), it is possible for them to pop up while the app/window switcher is up. The current result of having both up simultaneously is clearly broken, so we can either dismiss the popup or prevent the modal dialog from opening. Assume that the dialog indicates a more important action and should therefore take precedence, so go with the former. https://gitlab.gnome.org/GNOME/gnome-shell/issues/1536 --- diff --git a/js/ui/layout.js b/js/ui/layout.js index 7fb9f2419..c7dd6287f 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -189,6 +189,7 @@ var LayoutManager = GObject.registerClass({ 'startup-complete': {}, 'startup-prepared': {}, 'monitors-changed': {}, + 'system-modal-opened': {}, 'keyboard-visible-changed': { param_types: [GObject.TYPE_BOOLEAN] } }, }, class LayoutManager extends GObject.Object { _init() { diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index c29b89ba7..caa874454 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -219,6 +219,8 @@ var ModalDialog = GObject.registerClass({ if (!Main.pushModal(this, params)) return false; + Main.layoutManager.emit('system-modal-opened'); + this._hasModal = true; if (this._savedKeyFocus) { this._savedKeyFocus.grab_key_focus(); diff --git a/js/ui/switcherPopup.js b/js/ui/switcherPopup.js index 48f44c90f..945f4020a 100644 --- a/js/ui/switcherPopup.js +++ b/js/ui/switcherPopup.js @@ -46,6 +46,9 @@ var SwitcherPopup = GObject.registerClass({ Main.uiGroup.add_actor(this); + this._systemModalOpenedId = + Main.layoutManager.connect('system-modal-opened', () => this.destroy()); + this._haveModal = false; this._modifierMask = 0; @@ -319,6 +322,8 @@ var SwitcherPopup = GObject.registerClass({ _onDestroy() { this._popModal(); + Main.layoutManager.disconnect(this._systemModalOpenedId); + if (this._motionTimeoutId != 0) GLib.source_remove(this._motionTimeoutId); if (this._initialDelayTimeoutId != 0)